package siediyu.tutorialmod.item;

import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemGroups;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.server.command.PublishCommand;
import net.minecraft.util.Identifier;
import siediyu.tutorialmod.ToturialModClient;
import siediyu.tutorialmod.Tutorial;

public class ModItems {
    //创建一个石榴石
    //创建了一个新的Item实例。Item.Settings()是一个构造器，用于设置物品的默认属性，如最大堆叠大小、是否可叠加等。
    // 在这个例子中，Item.Settings()没有接收任何参数，所以它将使用默认设置。
    //注意,这里的name需要符合minecraft的唯一标识符规则(没有空格,全部小写)
    public static final Item PINK_GARNET = registerItem("pink_garnet",new Item(new Item.Settings()));

    public static final Item RAW_PINK_GARNET = registerItem("raw_pink_garnet",new Item(new Item.Settings()));

    private static Item registerItem(String name, Item item){
        //这个方法使用Minecraft的注册表系统来注册物品。这里的Registry是Minecraft中的
        // 它将物品添加到ITEM注册表中(第一个参数)
        // 使用模组的ID和物品的名称来创建一个唯一的标识符（Identifier）(第二个参数)
        // Identifier.of创建唯一标识符的方法
        // 一般就是mod名字(namespace)+物品名字(path)
        // Identifier.of(String namespace, String path)
        // 并将物品实例与这个标识符关联起来。(第三个参数)
        return Registry.register(Registries.ITEM, Identifier.of(Tutorial.MOD_ID, name), item);
    }

    //注册物品的函数
    public static void registerItems() {
        //使用模组的日志记录器来记录一条信息，表明正在注册模组的物品。
        //应该是相当于输出日志
        Tutorial.LOGGER.info("Registering Mod Items for "+Tutorial.MOD_ID);

        //注册石榴石Pink_GARNET
        //ItemGroupEvents.modifyEntriesEvent调用事件
        // 这个事件允许模组开发者修改特定物品组（ItemGroup）中的条目.
        // 这里是在ItemGroups.INGREDIENTS这个组里面添加item
        //这是对modifyEntriesEvent的注册，它添加了一个事件监听器
        // 这个监听器会在游戏加载Creative模式的物品栏时被调用。
        // entries是一个函数式接口，它接收一个Consumer类型的参数，这个参数允许你向物品组中添加物品。
        ItemGroupEvents.modifyEntriesEvent(ItemGroups.INGREDIENTS).register(entries -> {
            entries.add(PINK_GARNET);
            entries.add(RAW_PINK_GARNET);
        });
    }
}
